package com.blumov.fastbox.domain.model.compra;

import com.blumov.fastbox.domain.enums.InformationCode;
import com.blumov.fastbox.domain.exceptions.BusinessException;
import com.blumov.fastbox.domain.shared.ValueObject;

/**
 * Identifica de modo único a un pedido en particular. Automáticamente generado por la aplicación.
 *  
 */
public final class PedidoId implements ValueObject<PedidoId> {

	private static final long serialVersionUID = 1L;
	
	private String id;
	
	/**
	 * Constructor.
	 *
	 * @param id Id string.
	 */
	public PedidoId(final String id) {
		
		if (id == null) {
			throw new BusinessException(InformationCode.EMPTY_ID);
		}

		this.id = id;
	}
	
	/**
	 * @return String representation of this pedido id.
	 */
	public String idString() {
		return id;
	}
	
	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
	
		PedidoId other = (PedidoId) o;
		return sameValueAs(other);
	}
	
	@Override
	public int hashCode() {
		return id.hashCode();
	}
	
	public boolean sameValueAs(PedidoId other) {
		return other != null && this.id.equals(other.id);
	}
	
	@Override
	public String toString() {
		return id;
	}
	
	PedidoId() {
		// Needed by Hibernate
	}
}
